package com.java.polymorphism;

/**
 * 多态 - 子类
 */
public class Child extends Parent {
    public String name = "子类成员变量";
    public String child = "child";

    @Override
    public void publicFunc1() {
        System.out.println("子类公共成员方法");
    }

    static void staticFunc(Parent parent) {
        System.out.println("子类静态成员方法");
    }

    public static void main(String[] args) {
        Parent parent = new Child();
        System.out.println(parent.name); // 父类成员变量
        System.out.println(parent.parent); // parent
        // System.out.println(parent.child);
        parent.staticFunc(); // 父类静态成员方法
        parent.publicFunc1(); // 子类公共成员方法
        parent.publicFunc2(); // 父类公共成员方法

        // 父类作为方法形参并接收任意子类或实现类对象
        Child.staticFunc(new Child()); // 子类静态成员方法

        // 只能使用子类或实现类重写的方法，但需要使用子类或实现类特有方法时可强转，注意Child child = (Child) new Parent()不可行
        Child child = (Child) parent;
        child.staticFunc(new Child()); // 子类静态成员方法
    }
}
